using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;

namespace InseSoft.Models.Entities
{
    public class Empresa : CatalogEntity
    {
        #region Declarations

        private string cedula;
        private decimal impuestoVenta;
        private static Empresa emptyInstance;

        #endregion


        public Empresa()
        {
            Clientes = new List<Cliente>();
            Cotizaciones = new List<Cotizacion>();
            Lineas = new List<Linea>();
            Materiales = new List<Material>();
            Ordenes = new List<Orden>();
            SolicitudCotizacions = new List<SolicitudCotizacion>();
            TipoCambios = new List<TipoCambio>();
            Usuarios = new List<Usuario>();
            Vendedores = new List<Vendedor>();
        }

        public virtual string Cedula
        {
            get { return cedula; }
            set
            {
                cedula = value;
                OnPropertyChanged(() => Cedula);
            }
        }

        public virtual string Direccion { get; set; }
        public virtual string Telefono { get; set; }
        public virtual string Fax { get; set; }
        public virtual string Email { get; set; }
        public virtual decimal ImpuestoVenta
        {
            get { return impuestoVenta; }
            set
            {
                impuestoVenta = value;
                OnPropertyChanged(() => ImpuestoVenta);
                Validator.Validate(() => ImpuestoVenta);
            }
        }
        public virtual decimal Utilidad { get; set; }
        public virtual decimal PrecioMolde { get; set; }
        public virtual decimal PrecioTinta { get; set; }
        public virtual decimal PrecioPositivo { get; set; }
        public virtual decimal PrecioArte { get; set; }
        public virtual decimal PrecioSolvente { get; set; }
        public virtual decimal PrecioCorte { get; set; }
        public virtual decimal PrecioVelocidad { get; set; }
        public virtual decimal PrecioHoraImpresion { get; set; }
        
        public virtual ICollection<Cliente> Clientes { get; set; }
        public virtual ICollection<Cotizacion> Cotizaciones { get; set; }
        public virtual ICollection<Linea> Lineas { get; set; }
        public virtual ICollection<Material> Materiales { get; set; }
        public virtual ICollection<Orden> Ordenes { get; set; }
        public virtual ICollection<SolicitudCotizacion> SolicitudCotizacions { get; set; }
        public virtual ICollection<TipoCambio> TipoCambios { get; set; }
        public virtual ICollection<Usuario> Usuarios { get; set; }
        public virtual ICollection<Vendedor> Vendedores { get; set; }

        [NotMapped]
        public static Empresa EmptyInstance
        {
            get { return emptyInstance ?? (emptyInstance = new Empresa()); }
        }
    }
}
